With the rapid development of information techniques and computer techniques, computer users have higher requirements of the performance of computer systems. Thus, in order to avoid performance bottleneck including hardware bottleneck and software bottleneck in the computer systems, it is required to evaluate and analyze the performance of the computer systems, so as to provide corresponding performance optimization solutions, upgrade hardware and software of the systems and/or improve system architectures, thereby obtaining feasible hardware and software configurations and making utilization of computer resources balanced.
Generally, in order to evaluate the performance of the computer systems, profiling is performed to collect information such as process status in the system and how much CPU resources are used by different processes, modules and threads, respectively. Such information can be collectively referred to as profiling data. After the profiling data is analyzed by users, system administrators or system performance analyzers of the computer systems with existing analysis tools, improvement can be done on some important components of the computer systems, such as sharable runtime libraries, or compilers. Depending on the profiling duration and the number of running processes, threads and so on in the systems, the size of profiling data files obtained from the profiling varies from several megabytes to hundreds megabytes.
Since system performance analysis is often based on aggregate profiling data, the profiling data is required to be read out, calculated, organized, or even transformed. In existing techniques of computer system performance analysis, in order to satisfy the above requirements, traditionally, analysis tools need to pre-read all the contents of the profiling data and then create a target data model in a memory for subsequent analysis as needed.
However, this may cause many problems. For example, since files of the profiling data are required to be transformed into data models for storing into a memory, the occupied amount of the memory will be greatly increased with the increase of the size of the profiling data files. Moreover, for some huge profiling data files, it is impossible to open all these files, read all the contents thereof and then establish target data models in the memory due to the limitation of the memory capacity.
In addition, in most cases, the profiling data files of the computer systems use a hierarchy of Process/Thread/Module to organize the profile data. This hierarchy reflects the structure of the systems in a runtime environment, and is very useful in most cases. However, in addition to the most useful and well-known hierarchy of Process/Thread/Module, in actual system performance analysis procedures, users often need to construct other hierarchy tree structures {which can also be referred to as perspectives} to analyze data from other different views. For example, users may want to view the usage of a certain module in different processes in a hierarchy of “Module/Process”. At this time, an additional data model for reorganizing the profiling data after recalculating all the profiling data is required. Therefore, in order to represent a plurality of hierarchy tree structures, it is required to define a plurality of hierarchies and generate different target data models, thus more memory space will be occupied.
Thus, what is needed is a technique by which a predefined relational model can be established based on profiling objects and data type of profiling data in a computer system and the profiling data of the computer system can be reorganized according to different hierarchies based on the predefined relational model to generate different hierarchy tree structures. Users and system performance analyzers could freely view a target hierarchy tree structure as needed and obtain profiling information of corresponding profiling objects in the target hierarchy tree structure.